import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.filechooser.*;

/**
 * Cette classe permet d'affichier la fenetre principale :
 * le menu, l'aide, et le plateau du jeu d'echec d'alice.
 * 
 * Elle comporte aussi 2 Panels d'affichage pour :
 * - Le tour de jeu
 * - Les éventuels indications destinées à aider le joueur 
 **/
 

public class Fenetre extends JFrame implements ActionListener {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/*****Attributs*****/
	
	/*Interface Graphique*/	
	private Alice a = new Alice(false,this); 			/*Panel de l'interface de jeu*/
	private final int largeur = 900,	
					  hauteur = 600;	 			/*Dimensions de la fenêtre de l'application*/
	/*Eléments d'affichage utilisateur*/
	private JTextArea joueurJoue = new JTextArea(); /*Couleur du joueur qui joue*/
	private JTextArea error = new JTextArea();		/*Erreur de la part du joueur*/
	private JPanel panelJoueurJoue = new JPanel();
	private JPanel panelError = new JPanel();
	private JPanel panelJoueurJoueAndError = new JPanel();
	
	/*Eléments du menu*/
	private JMenuItem nouvelle;
	private JMenuItem charger;
	private JMenuItem sauvegarder;
	private JMenuItem aide;
	private JMenuItem quitter;
	
	/*****Methodes*****/

	/******** Constructeur ********/
	public Fenetre()
	{
		/*Propriétés de la frame*/
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new BorderLayout());
		
		this.setTitle("Jeu d'Echecs d'Alice");
		//this.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
		this.setSize(largeur, hauteur);
		
		/*Création de la barre de menu*/
		JMenuBar menuBar = new JMenuBar();
		
		/*Menu*/
		JMenu m1 = new JMenu("Fichier");
		m1.setMnemonic(KeyEvent.VK_F);
		menuBar.add(m1);
		
		JMenu m2 = new JMenu("?");
		m2.setMnemonic(KeyEvent.VK_F);
		menuBar.add(m2);
				
		/*Creation des éléments du menu*/
		nouvelle = new JMenuItem("Nouvelle Partie");
		nouvelle.addActionListener(this);
		m1.add(nouvelle);
		
		charger = new JMenuItem("Charger une partie");
		charger.addActionListener(this);
		m1.add(charger);
		
		sauvegarder = new JMenuItem("Sauvegarder");
		sauvegarder.addActionListener(this);
		m1.add(sauvegarder);
		
		aide = new JMenuItem("Notice Explicative");
		aide.addActionListener(this);
		m2.add(aide);
		
		quitter = new JMenuItem("Quitter");
		quitter.addActionListener(this);
		m1.add(quitter);
		
		
		/*Mise en place du menu dans la frame*/
		this.setJMenuBar(menuBar);
		  
		/*Ajout du panel indiquant quel joueur joue*/
		panelJoueurJoue.add(joueurJoue);
		joueurJoue.setText("C'est au joueur Blanc de jouer");
		joueurJoue.setEditable(false);
		joueurJoue.setFocusable(false);
		joueurJoue.setForeground(Color.BLUE);

		/*Ajout du panel indiquant les éventuels erreurs*/
		panelError.add(error);
		error.setText(" Allez y !");
		error.setEditable(false);
		error.setFocusable(false);
		error.setForeground(Color.GREEN);
		
		/*Ajout de ces 2 panels à la fenêtre de jeu*/
		panelJoueurJoueAndError.setLayout(new GridLayout(2,1));
		panelJoueurJoueAndError.add(panelJoueurJoue);
		panelJoueurJoueAndError.add(panelError);
		getContentPane().add(panelJoueurJoueAndError, BorderLayout.NORTH);
		
		/*Ajout et disposition des échiquiers*/
		a.setLayout(new BoxLayout(a, BoxLayout.PAGE_AXIS));
		this.getContentPane().add(a);
		
		/*Disposition et affichage de l'interface graphique*/
		this.setLocation(50, 50);
		this.setVisible(true);		
	}

	/*Interractions sur click des éléments du menu*/
	public void actionPerformed(ActionEvent e)
	{
		/*Nouvelle parite*/
		if(e.getSource() == nouvelle)
		{
			this.remove(a);
			this.a = new Alice(false,this);
			this.getContentPane().add(a);
			pack();
			this.setSize(largeur, hauteur);
		}
		/*Charger Partie*/
		else if(e.getSource() == charger)
		{
			RestorFenetre r = new RestorFenetre(this);
		}
		/*Sauver Partie*/
		else if(e.getSource() == sauvegarder)
		{
			SaveFenetre s = new SaveFenetre(this);
		}
		/*Aide*/
		else if(e.getSource() == aide)
		{
			AideFenetre ai = new AideFenetre(this);
		}
		/*Quitter l'application*/
		else if(e.getSource() == quitter)
		{
			System.exit(0);
		}
	}
	
	/******** Get & Set ********/

	public Alice getA() {
		return a;
	}

	public void setA(Alice a) {
		this.a = a;
	}
	
	public JTextArea getError() {
		return error;
	}

	public void setError(JTextArea error) {
		this.error = error;
	}
	
	public JTextArea getJoueurJoue() {
		return joueurJoue;
	}

	public void setJoueurJoue(JTextArea joueurJoue) {
		this.joueurJoue = joueurJoue;
	}
		
}



